package com.jie.eduorder.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jie.commonutils.JwtUtils;
import com.jie.commonutils.ResultEntity;
import com.jie.eduorder.entity.Order;
import com.jie.eduorder.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

/**
 * <p>
 * 订单 前端控制器
 * </p>
 *
 * @author xzj
 * @since 2020-10-17
 */
//@CrossOrigin  // 解决跨域问题
@RestController
@RequestMapping("/eduorder/order")
public class OrderController {

    private final OrderService orderService;

    @Autowired
    public OrderController(OrderService orderService) {
        this.orderService = orderService;
    }

    /**
     * 1.生成订单的方法
     * @param courseId  生成订单给当前课程, 这个参数就是当前课程的id
     * @param request   通过请求获取cookie, 从而得到token, 并从中得到用户id
     * @return          返回生成的订单信息
     */
    @PostMapping("/createOrder/{courseId}")
    public ResultEntity saveOrder(
            @PathVariable("courseId") String courseId,
            HttpServletRequest request
    ) {
        // 创建订单, 并返回订单号
        String orderNo = orderService.createOrder(courseId, JwtUtils.getMemberIdByJwtToken(request));
        return ResultEntity.ok().data("orderId", orderNo);
    }

    /**
     * 2.根据订单id查询订单信息
     * @param orderId  订单号
     * @return         返回订单信息
     */
    @GetMapping("/getOrderInfo/{orderId}")
    public ResultEntity getOrderInfo(
            @PathVariable("orderId") String orderId
    ) {
        // 这个orderId是订单号order_no
        Order order = orderService.getOne((new QueryWrapper<Order>()).eq("order_no", orderId));
        return ResultEntity.ok().data("item", order);
    }

    /**
     * 根据课程id和用户id查询订单表中订单状态
     * 感觉这样有点不好(为什么不从token中获取用户信息呢)
     * @param courseId  课程id
     * @param memberId  用户id
     * @return          返回该用户是否购买了该课程, 若是买了则返回true
     */
    @GetMapping("/isBuyCourse/{courseId}/{memberId}")
    public boolean isBuyCourse(
            @PathVariable("courseId") String courseId,
            @PathVariable("memberId") String memberId
    ) {
        QueryWrapper<Order> wrapper = new QueryWrapper<>();
        wrapper.eq("course_id", courseId);
        wrapper.eq("member_id", memberId);
        wrapper.eq("status", 1);  // 查询支付状态是否为1(1表示已购买)
        int count = orderService.count(wrapper);
        return count > 0;  // count大于0则表示已支付
    }

}

